package com.quique.pfc.activities;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.quique.pfc.R;
import com.quique.pfc.datos.BDAdapter;
import com.quique.pfc.datos.MoodleDao;
import com.quique.pfc.datos.Sesion;
import com.quique.pfc.dtos.CursoDto;
import com.quique.pfc.dtos.SiteInfoDto;
import com.quique.pfc.dtos.TokenDto;
import com.quique.pfc.servicios.MoodleService;
import com.quique.pfc.utils.adapters.CursoAdapter;

/**
 * Pantalla que muestra el listado de cursos disponibles
 * para el usuario autenticado. 
 */
public class CursosActivity extends Activity 
{
	
	/** Listado de cursos que se mostraran en pantalla */
	ArrayList<CursoDto> cursos = null;
	/** Lista con los cursos que se van a mostrar en la pantalla */
	ListView lv;
	/** Widget para mostrar un mensaje de espera */
	ProgressDialog progress = null;
	/** Contexto de la aplicacion */
	Context ctx;
	/** Metodo que se ejecuta al crear la Activity */
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		ctx = this;
		configurarVista();
		lv = (ListView)findViewById(R.id.listView1);
		//Calculamos la lista de cursos mientras se le muestra un mensaje
		//al usuario
		Log.i("moodle", "Calculando la lista de cursos");
		new CalculoCursosTask().execute();
	}
	/** Establece el XML que define la vista y le da comportamiento a los botones*/
	private void configurarVista()
	{
		super.setContentView(R.layout.cursos);
		//evitamos que se ponga la pantalla en horizontal
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        final Button button = (Button) findViewById(R.id.boton_volver_cursos);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) 
            {
            	//vamos al main_activity
            	Intent i = new Intent(
            			CursosActivity.this,
						PrincipalActivity.class);
				
				i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				startActivity(i);
            }
        });
	}
	
	/** Configura el ListView mostrado en pantalla*/
	private void configurarLista()
	{
		lv.setAdapter(new CursoAdapter(ctx, R.layout.list_item, cursos));
		lv.setTextFilterEnabled(true);
		lv.setOnItemClickListener(new OnItemClickListener() {
		    public void onItemClick(AdapterView<?> parent, View view,
		        int position, long id) 
		 {
		    if(cursos != null)
		    {
		    	Intent i = new Intent(CursosActivity.this, DetalleCursoActivity.class);
		    	CursoDto c = cursos.get(position);
		    	i.putExtra("cursoId", c.id);
		    	//Establecemos el curso que se esta visitando
		    	Sesion.cursoActual = c.id.intValue();
		    	i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//				i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
				startActivity(i);
		    }	
		    }
		  });
	}
	
	/** Calcula los cursos en segundo plano mientras muestra un mensaje de espera al usuario */
	class CalculoCursosTask extends AsyncTask<String, Integer, Boolean> 
	{
		/** Calcula la lista de cursos y configura el ListView */
		@Override
		protected Boolean doInBackground(String... params) 
		{
			//rellenamos la lista con los cursos disponibles para el usuario
			MoodleService mService = new MoodleService();
			cursos = mService.obtenerCursos(Sesion.token, Sesion.idUsu.toString());
			return Boolean.TRUE;   
		 }	
		/** Muestra un dialog al usuario mientras se realiza el calculo */
		@Override
		protected void onPreExecute() 
		{
			progress = ProgressDialog.show(ctx, "", ctx.getString(R.string.cargando), true);
			progress.show();
		}
		/** Metodo que se ejecuta cuando termina el calculo */
		@Override
		protected void onPostExecute(Boolean result) {
			//configuramos la lista
			configurarLista();
			//Cancelamos la pantalla de espera
			progress.dismiss();
		}
	}
	
	@Override
	public void onBackPressed()
	{
		//vamos al main_activity
    	Intent i = new Intent(
    			CursosActivity.this,
				PrincipalActivity.class);
		
		i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
		startActivity(i);
	}
	
}

